package cn.sykj.car.service.impl;

import cn.sykj.car.entity.ConfigPayway;
import cn.sykj.car.exception.CommonException;
import cn.sykj.car.exception.ParameterInvalidException;
import cn.sykj.car.mapper.ConfigPaywayMapper;
import cn.sykj.car.service.IConfigPaywayService;
import cn.sykj.car.utils.DiffEntityUtils;
import cn.sykj.car.utils.Utils;
import cn.sykj.car.vo.ResponseMessageVO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 支付方维护：只新增、修改、查询，无删除 服务实现类
 * </p>
 *
 * @author xuming
 * @since 2021-06-25
 */
@Service
public class ConfigPaywayServiceImpl extends ServiceImpl<ConfigPaywayMapper, ConfigPayway> implements IConfigPaywayService {

    /**
     * 添加支付方维护
     *
     * @param configPayway
     * @return
     * @throws Exception
     */
    @Override
    @Transactional
    public ResponseMessageVO addConfigPayway(ConfigPayway configPayway) throws Exception {

        // 判断参数是否为空
        if (Utils.isEmpty(configPayway)) {
            throw new ParameterInvalidException();
        }

        // 判断储值方式行不能为空
        if (Utils.isEmpty(configPayway.getType())) {
            throw new CommonException("", "储值方式行不能为空");
        }

        // 判断支付名称不能为空
        if (Utils.isEmpty(configPayway.getName())) {
            throw new CommonException("", "支付名称不能为空");
        }

        boolean ret = this.save(configPayway);

        ResponseMessageVO responseMessageVO = new ResponseMessageVO();
        responseMessageVO.setRetType("添加支付方维护");
        responseMessageVO.setRetFlag(ret);
        responseMessageVO.setRetMsg("添加支付方维护，ID为：" + configPayway.getId() +
                ";" + "添加支付名称:" + configPayway.getName());
        return responseMessageVO;
    }

    /**
     * 修改支付方维护
     *
     * @param configPayway
     * @return
     * @throws Exception
     */
    @Override
    @Transactional
    public ResponseMessageVO updateConfigPayway(ConfigPayway configPayway) throws Exception {

        // 验证参数是否为空
        if (Utils.isEmpty(configPayway) || Utils.isEmpty(configPayway.getId())) {
            throw new ParameterInvalidException();
        }

        // 判断原始记录是否存在
        ConfigPayway o_configPayway = this.getById(configPayway.getId());
        if (Utils.isEmpty(o_configPayway) ) {
            throw new CommonException("", "记录不存在");
        }
        if(o_configPayway.getType().intValue() != configPayway.getType().intValue()){
            throw new CommonException("","类型不能修改！");
        }

        // 把要更新的对象中的属性，覆盖到已有对象中
        boolean ret = baseMapper.updateConfigPayway(configPayway) > 0;

        // 定义修改字符串：
        String editMes = "";

        // 遍历修改的内容与原始内容相比较，如果有变更，则记录
        ConfigPayway afterConfigPayway = this.getById(configPayway.getId());
        Map<String, List<Object>> diffMap = DiffEntityUtils.getDifferent(o_configPayway, afterConfigPayway);
        if (Utils.notEmpty(diffMap) && diffMap.size() > 0) {
            for (String s : diffMap.keySet()) {
                editMes = editMes + ">" + s + "==>修改前【" + diffMap.get(s).get(0) + "】-修改后【" + diffMap.get(s).get(1) + "】;";
            }
        }

        ResponseMessageVO responseMessageVO = new ResponseMessageVO();
        responseMessageVO.setRetType("修改银行账户信息");
        responseMessageVO.setRetFlag(ret);
        responseMessageVO.setRetMsg("修改银行账户信息，ID为：" + afterConfigPayway.getId() + ";具体修改信息为：" + editMes);
        return responseMessageVO;
    }
}
